#include "inmersionessourcemodel.h"

InmersionesSourceModel::InmersionesSourceModel( DataStore* datastore ) : _datastore( datastore ) {}

bool InmersionesSourceModel::removeRows( int row, int count, const QModelIndex& /*parent*/ )
{
    if( count <= 0 || row < 0 || (row+count) > _inmersiones.count() ) return false;
    beginRemoveRows( QModelIndex(), row, (row+count-1) );
    Inmersion* inmersion = NULL;
    for( int i = 0; i < count; ++i )
    {
        inmersion = _inmersiones.at( row );
        _datastore->deleteInmersion( inmersion );
        _inmersiones.removeAt( row );
    }
    endRemoveRows();
    return true;
}

void InmersionesSourceModel::clearInmersiones()
{
    beginResetModel();
    _inmersiones.clear();
    endResetModel();
}

quint32 InmersionesSourceModel::loadInmersiones( Buceador* buceador )
{
    beginResetModel();
    _inmersiones.clear();
    _inmersiones = buceador->inmersiones();
    endResetModel();
    return _inmersiones.count();
}

QVariant InmersionesSourceModel::data( const QModelIndex& index, int role ) const
{
    if( !index.isValid() ) return QVariant();
    if( index.row() < 0 || index.row() >= _inmersiones.count() ) return QVariant();
    Inmersion* inmersion = _inmersiones.at( index.row() );
    if( role == Qt::DisplayRole ) return QString( "%1. %2" ).arg( inmersion->numero() ).arg( inmersion->sitio()->nombre() );
    if( role == Qt::SizeHintRole ) return QSize( -1, 60 );
    if( role == InmersionesSourceModel::InmersionRole ) { QVariant v; v.setValue( inmersion ); return v; }
    if( role == InmersionesSourceModel::NumeroRole ) return inmersion->numero();
    if( role == InmersionesSourceModel::InicioRole ) return inmersion->inicio();
    if( role == InmersionesSourceModel::HoraRole ) return inmersion->inicio().time();
    if( role == InmersionesSourceModel::DuracionRole ) return inmersion->duracion();
    if( role == InmersionesSourceModel::FinRole ) return inmersion->inicio().addSecs( inmersion->duracion() );
    if( role == InmersionesSourceModel::SitioRole ) return inmersion->sitio()->nombre();
    if( role == InmersionesSourceModel::UbicacionRole ) return inmersion->sitio()->ubicacion()->nombre();
    if( role == InmersionesSourceModel::PaisRole ) return inmersion->sitio()->ubicacion()->pais()->nombre();
    if( role == InmersionesSourceModel::ViajeRole ) return( inmersion->viaje() ? inmersion->viaje()->destino() : Strings::noviaje );
    return QVariant();
}
